package com.geekgo.flowcontroller.annotation;

import com.geekgo.flowcontroller.core.RateLimitStrategy;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author geekgo
 * @version 2016/8/3 16:49
 */
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface RateLimit {

    /**
     * 如果不指定，则默认取所在类名
     * @return
     */
    String key() default "";

    /**
     * 限流方法不指定rate，则默认继承该rate
     * @see QPSRate
     */
    double rate() default Double.MAX_VALUE;

    /**
     * 如果存在相同key的限流方法则指定处理策略
     * @return
     */
    RateLimitStrategy strategy() default RateLimitStrategy.USE_MIN;
}
